Pravila cena u korpi za kupovinu

Promena primene pravila za cene u korpi za kupovinu u Magento-u

Magento pruža razne opcije za primenu promocija u korpi za kupovinu. Pravila se mogu primeniti samo ako su ispunjeni određeni uslovi, na osnovu atributa proizvoda, kupca ili korpe za kupovinu. Međutim, kada treba da se primene različita pravila sa funkcionalnošću "na klik", ovo možda neće biti dovoljno.Jedan pristup je da se zameni klasa koja upravlja procesiranjem pravila i modifikuje kolekciju pravila. Da bi ovo funkcionisalo, prepisivanje klase treba da bude specificirano u datoteci config.xml modula kreiranog za ovu svrhu.

app/code/local/Betech/SalesRule/etc/config.xml

< config > < modules > < betech_salesrule > < version > 0.1.0 < /version > < /betech_salesrule > < /modules > < global > < models > < salesrule > < rewrite > < validator > Betech_SalesRule_Model_Validator < /validator > < /rewrite > < /salesrule > < /models > < /global > < /config >

Prepisivanje klase app/code/core/Mage/SalesRule/Model/Validator.php omogućava nam da modifikujemo metodu _getRules() koja vraća kolekciju pravila za procesiranje.

/** * Get rules collection for current object state * * @return Mage_SalesRule_Model_Mysql4_Rule_Collection */ protected function _getRules() { $key = $this->getWebsiteId() . '_' . $this->getCustomerGroupId() . '_' . $this->getCouponCode(); return $this->_rules[$key]; Mage::dispatchEvent('betech_salesrule_rules_collection', array('rules' => $rules)); return $rules; }

Umesto da se odmah vrati kolekcija pravila u ovoj metodi, event može biti pokrenut sa objektom kolekcije.

app/code/local/Betech/SalesRule/Model/Validator.php

class Betech_SalesRule_Model_Validator extends Mage_SalesRule_Model_Validator { /** * Get rules collection for current object state * * @return Mage_SalesRule_Model_Mysql4_Rule_Collection */ protected function _getRules() { $key = $this->getWebsiteId() . '_' . $this->getCustomerGroupId() . '_' . $this->getCouponCode(); $rules = $this->_rules[$key]; Mage::dispatchEvent('betech_salesrule_rules_collection', array('rules' => $rules)); return $rules; } }

Ovo omogućava bilo kom modulu da registruje observer za event betech_salesrule_rules_collection i modifikuje koje će se pravila primeniti na osnovu prilagođenih uslova. Pravila koja bi se normalno primenjivala sada mogu biti uklonjena iz kolekcije ako je potrebno, i samo željena pravila mogu biti primenjena. Pravila koja će biti primenjena ovim pristupom moraju ostati neaktivna kako ne bi bila primenjena podrazumevano. Magento će pozivati metodu koja obrađuje pravila korpe mnogo puta kada se dese različite korisničke akcije, pa će prilagođeni uslovi morati biti sačuvani. Postavljanje ovih uslova u sesiju omogućiće da budu dostupni kad god je potrebno.